package com.gagakuai.engine.impl.pvm.runtime;

import com.gagakuai.engine.impl.runtime.InterpretableExecution;

/*
 * @program: common-starters
 * @description: 原子操作类：定义了流程引擎对于流程控制的内部逻辑
 *
 *             针对一个节点而言：
 *                  1：首先会执行当前节点的start监听器
 *                  2：执行当前节点的行为类的execute()
 *                  3: 如果还有下一个节点，执行end监听器
 *                  4：执行经过连线的take()
 *
 *            每一个节点依旧如此
 *
 *
 *
 * @author: houhong
 * @create: 2023-01-02 18:58
 */
public interface AtomicOperation {

    /*
     * 流程实列开始原子处理类
     */
    AtomicOperation PROCESS_START = new AtomicOperationProcessStart();
    /*
    *
    *   流程启动准备原子类
    */
    AtomicOperation PROCESS_START_INITIAL = new AtomicOperationProcessStartInitial();

    /*
     * 通知连线完成事件原子类：主要做两件事：
     * 1：负责触发当前节点配置的事件类型为end的执行监听器
     * 2：执行下一个需要处理的原子类：TRANSITION_DESTROY_SCOPE
     */
    AtomicOperation TRANSITION_NOTIFY_LISTENER_END = new AtomicOperationTransitionNotifyListenerEnd();
    /*
     * 连线销毁原子类
     */
    AtomicOperation TRANSITION_DESTROY_SCOPE = new AtomicOperationTransitionDestroyScope();
    /*
     * 执行
     */
    void execute(InterpretableExecution execution);

    /*
     * 是否是异步
     */
    Boolean isAsync(InterpretableExecution execution);
}
